#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int Maxn=2e5+5;
const int Mod=998244353;
int n,k;
int w[110][110];
int f[110][110];

int fa[110],val[110];
int dp[Maxn],sm[Maxn];
vector<int>e[Maxn];

int qfind(int key){
    return key==fa[key]?key:fa[key]=qfind(fa[key]);
}
inline void Merge(int x,int y){
    int qx=qfind(x),qy=qfind(y);
    if(qx==qy) return ;
    fa[qx]=qy,val[qy]+=val[qx];
}

int main(){
    freopen("soft.in","r",stdin);
    freopen("soft.out","w",stdout);

    scanf("%d%d",&n,&k);
    for(int i=1;i<n;i++){
        int u,v;
        scanf("%d%d",&u,&v);
        e[u].emplace_back(v);
        e[v].emplace_back(u);
    }

    if(n<=00){
                for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++) fa[j]=j,val[j]=1;
                for(int j=i;j<=n;j++){
                    for(auto t:e[j]){
                        if(t>=i and t<=j) Merge(t,j);
                    }
                    if(val[qfind(i)]==j-i+1) w[i][j]=1;
                }
            }
            f[0][0]=1;
            for(int i=1;i<=n;i++){
                for(int j=1;j<=k;j++){
                    for(int q=0;q<i;q++){
                        f[i][j]=(f[i][j]+w[q+1][i]*f[q][j-1])%Mod;
                    }
                }
            }
            for(int i=1;i<=k;i++) printf("%lld\n",f[n][i]);

            return 0;
    }

    for(int j=1;j<=k;j++){
        if(j==1) sm[0]=1;else sm[0]=0;
        for(int i=1;i<=n;i++) sm[i]=(sm[i-1]+dp[i])%Mod;
        for(int i=1;i<=n;i++) dp[i]=sm[i-1];
        printf("%lld\n",dp[n]);
        // for(int i=1;i<=n;i++) cout<<"hel "<<i<<' '<<j<<" "<<f[i][j]<<endl;
    }
    // for(int i=1;i<=k;i++) printf("%lld\n",f[n][k]);
    return 0;
}
/*
2 2
2 1

5 5
1 2
1 3
3 4
3 5

10 10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
*/